iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
AI/ ML & Data

AI 學習紀錄系列 第 28

Day 28 : Discord Bot + LLM

  • 分享至 

  • xImage
  •  

接著來嘗試串 Discord bot。

首先前往 Discord Developer Portal,建一個新 Applications,創建時會有個 token,記得要把它記下來。
https://discord.com/developers/applications

https://ithelp.ithome.com.tw/upload/images/20240907/201683187XnVduWTax.png

不過建好後如果忘了 token,可以進入 Bot 分頁,找到 reset token,可重新創建。
https://ithelp.ithome.com.tw/upload/images/20240907/20168318iGzpaIghIH.png
https://ithelp.ithome.com.tw/upload/images/20240907/20168318Kzvpe1q3pe.png

接著我們進入 OAuth2 分頁,往下拉,要創造一個邀請連結,把機器人邀進自己的群組。
選擇Bot,下面權限先給 Adminstrator,這樣最下方就會出現邀請連結,開啟連結邀請機器人。
https://ithelp.ithome.com.tw/upload/images/20240907/20168318wIsTsaLNwE.png
https://ithelp.ithome.com.tw/upload/images/20240907/20168318PE2ccLkLoc.png

接著我們到到 Bot 分頁,把 Privileged Gateway Intents 中的 MESSAGE CONTENT INTENT選項打開,才可以讓機器人接收訊息。

更多說明可以參考:
https://discord.com/developers/docs/topics/gateway#gateway-intents
https://ithelp.ithome.com.tw/upload/images/20240907/20168318hbvJpBidEX.png

接下來開始寫程式,從官方列出的眾多 Library 中,選一個網路上有教學的 discord.py 來用。
https://discord.com/developers/docs/topics/community-resources#interactions

https://ithelp.ithome.com.tw/upload/images/20240907/20168318vKgAH7eygP.png

依照 readme 的說明,安裝 discord.py。
https://github.com/Rapptz/discord.py

python3 -m pip install -U discord.py

接著照著 readme 中的 Bot Example,創建、執行程式,裏頭的 token 改成稍早複製下來的。
完成後這就是一個簡單的回覆機器人

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='>', intents=intents)

@bot.command()
async def ping(ctx):
    await ctx.send('pong')

bot.run('your discord token')

執行成功會發現你的群組中多了一個機器人。
https://ithelp.ithome.com.tw/upload/images/20240911/20168318N5TrNtdNN5.png

接下來就可以很簡單地把 llm 串近來。

  • 裡面的 intents是要求機器人的權限
  • command_prefix 是用來設定前綴符號,可以自由選擇($, #, &...),之後輸入前綴符號再打指令,就可以觸發機器人。我設置成 %。
  • 指令名稱就是你的 function 名稱,我創建了一個 function 叫 llm,所以指令會是 %llm。
from transformers import AutoTokenizer, AutoModel
import torch

tokenizer = AutoTokenizer.from_pretrained(r"G:\LLM\chatglm-6b", trust_remote_code=True)

model = AutoModel.from_pretrained(r"G:\LLM\chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()

history = []

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix = "%", intents = intents)

@bot.event
async def on_ready():
    print(f"目前登入身份 --> {bot.user}")

@bot.command()
async def llm(ctx, arg):
    global history
    response, history = model.chat(tokenizer, arg, history)
    await ctx.send(response)

bot.run("your discord token")

執行看看。
https://ithelp.ithome.com.tw/upload/images/20240915/201683187DCTWAm4uz.png
https://discordpy.readthedocs.io/en/stable/ext/commands/commands.html


上一篇
Day 27 : TG Bot + VisualGLM-6B or Gemini
下一篇
Day 29: Discord Bot + Gemini
系列文
AI 學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言